import java.util.Arrays;

public class TestDemo2 {
    public static void func2(String s) {
       /* if(s == null || s.length() == 0) {

        }*/
        assert s != null;

       /* if(s.length() == 0 || s == null) {

        }*/
        //goto ;
    }

    public static void main12(String[] args) {
        func2(null);
    }
    public static void main11(String[] args) {
        //数组的整体赋值 只有1次机会 就是在定义的时候
        final int[] array = {1,2,3,4,5};
        //array = new int[]{4,5,6,7};
        String str1 = null;//str1这个引用 不指向任何对象
        String str2 = "";//str2这个引用 指向的字符串是空的
        System.out.println(str2.length());
    }

    public static void main10(String[] args) {
        String str1 = null;
        String str2 = "11";//反射修改
        System.out.println(str2.equals(str1));
    }

    public static void main9(String[] args) {
        String str1 = "11";
        String str2 = new String("1")+new String("1");
        str2.intern();//手动入池-》当字符串常量池 没有的时候，就会入池
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));
    }

    public static void main8(String[] args) {
        String str2 = new String("1")+new String("1");
        str2.intern();//手动入池
        String str1 = "11";
        System.out.println(str1 == str2);
    }

    public static void main7(String[] args) {
        String str1 = "11";
        String str2 = new String("1")+new String("1");
        System.out.println(str1 == str2);
    }

    public static void main6(String[] args) {
        String str1 = "hello";
        String str2 = "he"+"llo";//此时，他两都是常量，编译的时候，就已经确定好了是"hello"
        String str3 = "he";
        String str4 = str3+"llo";//此时str3是一个变量-》编译的时候，不知道是啥？
        System.out.println(str1 == str4);
    }

    public static void main5(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        //这里没new对象，同样的字符串，就把字符串常量池的内容再重新给了str2
        System.out.println(str1 == str2);

    }

    public static void main4(String[] args) {
        //池用来提高效率，用就从里面取
        String str1 = "hello";//双引号的字符串在字符串常量池
        String str2 = new String("hello");//重新new了一个对象，有了新地址
        //但new的对象内容就是常量池中的内容又拷贝了一份
        System.out.println(str1 == str2);
    }

    public static void func(String s,char[] array) {
        s = "abc";//把abc的地址传给了s，s本来指向str的地址发生了改变
        array[0] = 'p';//但这个不会改
    }
    public static void main3(String[] args) {
        String str = "abcdef";
        char[] chars = {'b','i','t'};
        func(str,chars);
        System.out.println(str);//不变
        System.out.println(Arrays.toString(chars));//pit
    }

    public static void main2(String[] args) {
        String str = "abcdef";
        String str2 = str;
        System.out.println(str);
        System.out.println(str2);
        str = "bit";
        System.out.println("===========");
        System.out.println(str);
        System.out.println(str2);
    }

    public static void main1(String[] args) {
        //String创建的三种方法
        String str = "abcdef";

        String str2 = new String("hello");

        char[] chars = {'a','b','c'};
        String str3 = new String(chars);
    }

}
